﻿
#ifndef BDSCHANNELONEPLUGIN_H
#define BDSCHANNELONEPLUGIN_H

/**
 * @file bdschanneloneplugin.h
 * @brief BDS Channel One插件的主头文件
 * @details 该文件包含BDSChannelOnePlugin类的定义，该类是插件的核心类，
 *          负责实现插件接口并管理插件的生命周期
 *          English: This file contains the definition of BDSChannelOnePlugin class,
 *                   which is the core class of the plugin, responsible for implementing
 *                   the plugin interface and managing the plugin's lifecycle
 * @note 中文注释：定义BDSChannelOnePlugin类，实现插件接口
 *       English: Define BDSChannelOnePlugin class, implement plugin interface
 */
#include <extensionsystem/iplugin.h>
#include <QtPlugin>
#include <QTextCodec>
#include <QGraphicsView>
#include <QMessageBox>

using namespace ExtensionSystem;

namespace BDSChannelOne {

/**
 * @class BDSChannelOnePlugin
 * @brief BDS Channel One插件的主类
 * @details 该类继承自ExtensionSystem::IPlugin，实现了插件的生命周期管理
 *          负责初始化插件、管理扩展和处理关闭事件。它是插件与应用程序之间的主要接口
 *          English: This class inherits from ExtensionSystem::IPlugin, implements plugin lifecycle management
 *                   Responsible for initializing plugin, managing extensions and handling shutdown events.
 *                   It is the main interface between the plugin and the application
 */
class BDSChannelOnePlugin : public ExtensionSystem::IPlugin
{
    Q_OBJECT
    // TODO: Qt5.15.2升级 - 检查Q_PLUGIN_METADATA宏参数是否符合新版本要求
    Q_PLUGIN_METADATA(IID "org.BlueBlazer.Frameworks.Plugin" FILE "bdschannelone.json")
    // TODO: Qt5.15.2升级 - 确认Q_INTERFACES宏的使用方式是否有变化
    Q_INTERFACES(ExtensionSystem::IPlugin)
public:
    /**
 * @brief 构造函数
 * @details 初始化BDSChannelOnePlugin实例，设置插件的基本属性和初始状态
 *          English: Initialize BDSChannelOnePlugin instance, set basic properties and initial state of the plugin
 * @note TODO: C++17升级 - 考虑使用constexpr构造函数
 */
explicit BDSChannelOnePlugin(); // TODO: C++17升级 - 考虑使用constexpr构造函数
public:
    /**
 * @brief 初始化插件
 * @param arguments 命令行参数列表，包含传递给插件的启动参数
 * @param errorString 错误信息输出指针，若初始化失败则存储错误信息
 * @return 初始化成功返回true，否则返回false
 * @details 插件加载时被调用，用于完成插件的初始化工作，包括资源加载、
 *          组件注册和初始设置等
 *          English: Called when plugin is loaded, used to complete plugin initialization,
 *                   including resource loading, component registration and initial setup
 * @note TODO: Qt5.15.2升级 - 检查函数参数和返回值是否有变化
 */
bool initialize(const QStringList &arguments, QString *errorString) override; // TODO: Qt5.15.2升级 - 检查函数行为是否有变化
                                                                                // TODO: C++17升级 - 考虑添加[[nodiscard]]属性

    /**
 * @brief 扩展初始化完成
 * @details 所有插件加载完成后被调用，用于建立插件间的依赖关系，
 *          执行后续初始化操作
 *          English: Called after all plugins are loaded, used to establish dependencies between plugins,
 *                   and perform subsequent initialization operations
 * @note TODO: Qt5.15.2升级 - 确认函数调用时机和行为是否有变化
 */
void extensionsInitialized() override; // TODO: Qt5.15.2升级 - 确认函数调用时机和行为是否有变化

    /**
 * @brief 即将关闭
 * @return 返回关闭标志，指示是否可以立即关闭
 * @details 应用程序即将关闭时被调用，用于清理资源、保存状态
 *          和执行其他关闭前的必要操作
 *          English: Called when application is about to close, used to clean up resources,
 *                   save state and perform other necessary operations before closing
 * @note TODO: Qt5.15.2升级 - 检查ShutdownFlag枚举是否有变化
 */
IPlugin::ShutdownFlag aboutToShutdown() override; // TODO: Qt5.15.2升级 - 检查ShutdownFlag枚举是否有变化
                                                     // TODO: C++17升级 - 考虑添加noexcept规范
};

}

#endif // BDSCHANNELONEPLUGIN_H
